import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from "path"
import viteCompression from 'vite-plugin-compression'
import vitePluginObfuscator from 'vite-plugin-javascript-obfuscator';
// 环境变量配置
const targetUrl = process.env.API_TARGET || 'http://127.0.0.1:8081/api';
// 是否是生产环境
const isProduction = process.env.NODE_ENV === 'production';
function configureCompression() {
  return viteCompression({
    verbose: process.env.NODE_ENV !== 'production', // 开发环境启用详细日志
    disable: false, // 开启压缩(不禁用)，默认即可
    deleteOriginFile: false, // 不删除源文件
    threshold: 10240, // 压缩前最小文件大小
    algorithm: 'gzip', // 压缩算法
    ext: '.gz', // 文件类型
  });
}

// https://vitejs.dev/config/
export default defineConfig({
  build: {
    outDir: 'dist' // 保持主输出目录不变
  },
  plugins: [
    vue(),
    configureCompression(),
    configureObfuscator()
  ],
  resolve: {
    alias: {  // 这里就是需要配置resolve里的别名
      "@": path.join(__dirname, "./src"), // path记得引入
      // 'vue': 'vue/dist/vue.esm-bundler.js' // 定义vue的别名，如果使用其他的插件，可能会用到别名
    },
  },
  server: {
    proxy: {
      '/v1/api': {
        target: targetUrl,
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/v1\/api/, '')
      }
    }
  }
})

/**
 * 配置代码混淆插件
 * 根据是否为生产环境来决定是否启用代码混淆，以保护关键代码逻辑
 * @returns 混淆插件配置对象或null（非生产环境时）
 */
function configureObfuscator() {
  if (!isProduction) return null;

  return vitePluginObfuscator({
    // ✅ 只混淆入口和工具函数，避免混淆路由
    include: ['src/main.ts', 'src/App.vue', 'src/utils/**'],
    exclude: [
      'node_modules/**',
      'src/components/**',
      'src/views/**',      // ❗关键：不要混淆 views 文件
      'src/router/**',     // ❗关键：不要让 router 被混淆
    ],

    // 🔐 基础混淆（安全版）
    compact: true,
    identifierNamesGenerator: 'hexadecimal',
    identifiersPrefix: 'x_',

    // ✅ 字符串混淆：但避开路径
    stringArray: true,
    stringArrayEncoding: ['base64'],
    stringArrayThreshold: 0.5,  // 降低比例

    numbersToExpressions: true,
    splitStrings: true,
    splitStringsChunkLength: 10,

    disableConsoleOutput: true,

    // ❌ 高风险关闭
    controlFlowFlattening: false,
    deadCodeInjection: false,
    debugProtection: false,
    transformObjectKeys: false,  // ❗必须 false，否则破坏 import 路径
    globalConcealing: false,
    selfDefending: false,

    sourceMap: false,
    simplify: true,
  } as any);
}